/*
 * @(#)LinguisticLabel.java        1.0 2000/05/09
 *
 * This file is part of Xfuzzy 3.0, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.lang;

/**
 * Interfaz que describe una etiqueta ling��stica. Esta interfaz la
 * desarrollan las clases ParametricMemFunc y FamiliarMemFunc.
 * 
 * @author Francisco Jos� Moreno Velo
 *
 */
public interface LinguisticLabel extends MemFunc {
	
	//----------------------------------------------------------------------------//
	//                            M�TODOS P�BLICOS                                //
	//----------------------------------------------------------------------------//
	
	/**
	 * Obtiene el nombre de la etiqueta ling��stica
	 */
	public String getLabel();
	
	/**
	 * Asigna el nombre de la etiqueta ling��stica
	 */
	public void setLabel(String label);
	
	/**
	 * Compara la cadena con la etiqueta ling��stica
	 */
	public boolean equals(String label);

	/**
	 * Obtiene el valor de la etiqueta ling��istica
	 */
	public String toString();
	
	/**
	 * Incrementa el contador de enlaces (usos) del objeto
	 */
	public void link();
	
	/**
	 * Decrementa el contador de enlaces (usos) del objeto
	 */
	public void unlink();
	
	/**
	 * Estudia si el objeto esta siendo utilizado
	 */
	public boolean isLinked();
	
	/**
	 * Genera la descripci�n XFL3 de la etiqueta ling��stica
	 */
	public String toXfl();
	
	/**
	 * Elimina los enlaces del objeto
	 */
	public void dispose();
	
	/**
	 * Calcula el grado de pertenencia de la funci�n
	 */
	public double compute(double x);
	
	/**
	 * Aplicaci�n del modificador "mayor o igual" sobre la funci�n
	 */
	public double greatereq(double x);
	
	/**
	 * Aplicaci�n del modificador "menor o igual" sobre la funci�n
	 */
	public double smallereq(double x);
	
	/**
	 * Obtiene el valor por defecto del centro de la funci�n
	 */
	public double center();
	
	/**
	 * Obtiene el valor por defecto de la base de la funci�n
	 */
	public double basis();
	
	/**
	 * Derivada del grado de pertenencia
	 */
	public double[] deriv_eq(double x) throws XflException;
	
	/**
	 * Derivada del modificador "mayor o igual"
	 */
	public double[] deriv_greq(double x) throws XflException;
	
	/**
	 * Derivada del modificador "menor o igual"
	 */
	public double[] deriv_smeq(double x) throws XflException;
	
	/**
	 * Derivada del centro de la funci�n
	 */
	public double[] deriv_center() throws XflException;
	
	/**
	 * Derivada de la base de la funci�n
	 */
	public double[] deriv_basis() throws XflException;
	
	/**
	 * Obtiene el l�mite inferior del universo de discurso
	 */
	public double min();
	
	/**
	 * Obtiene el l�mite superior del universo de discurso
	 */
	public double max();
	
	/**
	 * Obtiene la separaci�n entre los puntos del universo
	 */
	public double step();
	
	/**
	 * Verifica si la descripci�n de la funcion es correcta
	 */
	public boolean test();
	
	/**
	 * Verifica si alg�n par�metro de la funci�n es ajustable
	 */
	public boolean isAdjustable();
	
	/**
	 * Obtiene los valores de los par�metros de la funci�n
	 */
	public double[] get();
	
	/**
	 * A�ade un valor a la derivada de un par�metro
	 */
	public void addDeriv(int index, double deriv);
	
}
